//
//  LWUserAccountViewModel.swift
//  Swift_Weibo_HLW
//
//  Created by huanglinwang on 16/9/22.
//  Copyright © 2016年 Linwang. All rights reserved.
//

import UIKit
//封装授权页面的网络请求 - 对应的视图是LWOAuthVC.swift
class LWUserAccountViewModel: NSObject {
    //单例全局访问点: 用户模型对象全局共享
    static let sharedUserAccoutnViewModel: LWUserAccountViewModel = LWUserAccountViewModel()
    //用户   归档用户对象
    var userAccount: LWUserAccount? {
        //从沙盒路径获取
        return LWUserAccount.loadUserAccount()
    }
    //判断是否登陆操作
    var isLogin: Bool {
        return accessToken != nil
    }
    //判断accessToken时候过期
    var accessToken: String?{
        //1. 获取LWUserAccount 里面的accessToken这个属性
        let token = userAccount?.access_token
        //2.获取过期时间对象
        let expiresDate = userAccount?.expiresDate
        //3.如果token存在,判断是否过期
        if let t = token {
            //标示accessToken不为nil
            if expiresDate?.compare(Date()) == .orderedDescending{
                //如果过期时间> 当前时间  结果是降序方式
                return t
            }else{
                return nil
            }
        }
        return nil
    }
    //根据code获取accessToken  -  请求是否成功
    func requestAccessToken(code: String ,callBack:@escaping ((Bool)->())) {
        LWNetworkTools.sharedTools.requestAccessToken(code: code) { (response, error) in
            if error != nil{
                print(error)
                //失败的回调
                callBack(false)
                return
            }
            //请求成功 返回的是一个字典
            print(response)
            //判断是不是字典
            guard let dict = response as? [String :Any] else{
                print("不是字典")
                callBack(false)
                return
            }
            //字典转模型
            let userAccount = LWUserAccount(dict: dict)
            //查看模型的值
            print(userAccount.access_token)
            self.requestUserInfo(userAccount: userAccount, callBack: callBack)
        }
    }
    //根据accessToken 获取用户信息  --name--profile_image_url
    private func requestUserInfo(userAccount: LWUserAccount , callBack:@escaping ((Bool)->())) -> () {
        LWNetworkTools.sharedTools.requestUserInfo(accessToken: userAccount.access_token!, uid: userAccount.uid) { (response, error) in
            if error != nil{
                print("异常")
                callBack(false)
                return
            }
            //请求成功
            guard let dict = response as? [String: Any] else{
                //
                print("不是字典")
                callBack(false)
                return
            }
            let name = dict["name"]
            let profile_image_url = dict["profile_image_url"]
            userAccount.name = name as? String
            userAccount.profile_image_url = profile_image_url as? String
            //打印获取的用户信息
            print(userAccount.name)
            print(userAccount.profile_image_url)
            //进行归档  用户登陆成功
            userAccount.saveUserAccount()
            callBack(true)
        }
    }
}
